t = int(input())
while t:
n,c0,c1,h = map(int,input().split())
s = input()
a = s.count('1') * c1
b = s.count('0' ) * c0
df = a+b
if c1 > c0:
ans1 = s.count('1') * h
ab = ans1 + (n * c0)
print(min(df,ab))
elif c1 < c0:
ans1 = s.count('0') * h
ab = ans1 + (n*c1)
print(min(df,ab))
elif c1 == c0:
print(df)
t -= 1
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cout<< #x << " = " << x <<endl;
#define endl "\n"
typedef long long ll;
void solve() {
int n, a, b, h; cin >> n >> a >> b >> h;
string s; cin >> s;
if(a == b) {
cout<< n * a << endl; return;
}
int z = 0, o = 0;
for(auto i: s) z += i == '0', o += i == '1';
if(a < b) {
if(h + a < b) {
cout<< z * a + o * (h + a) << endl; return;
}
cout<< z * a + o * b << endl; return;
}
if(a > b) {
if(b + h < a) {
cout<< (b + h) * z + o * b << endl; return;
}
cout<< a * z + b * o << endl; return;
}
}
int32_t main() {
ios::sync_with_stdio(false); cin.tie(0);
int T = 1;
cin >> T;
while(T --) {
solve();
}
return 0;
}
1271C - Shawarma Tent | 805A - Fake NP |
1163A - Eating Soup | 787A - The Monster |
807A - Is it rated | 1096A - Find Divisible |
1430C - Numbers on Whiteboard | 1697B - Promo |
208D - Prizes Prizes more Prizes | 659A - Round House |
1492C - Maximum width | 171B - Star |
1512B - Almost Rectangle | 831B - Keyboard Layouts |
814A - An abandoned sentiment from past | 268C - Beautiful Sets of Points |
1391C - Cyclic Permutations | 11A - Increasing Sequence |
1406A - Subset Mex | 1365F - Swaps Again |
50B - Choosing Symbol Pairs | 1719A - Chip Game |
454B - Little Pony and Sort by Shift | 1152A - Neko Finds Grapes |
1719B - Mathematical Circus | 1719C - Fighting Tournament |
1642A - Hard Way | 285C - Building Permutation |
1719E - Fibonacci Strings | 1696C - Fishingprince Plays With Array |